package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
//导入的鲍20251105

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.HaAreaMapper;
import com.ruoyi.system.domain.HaArea;
import com.ruoyi.system.service.IHaAreaService;

/**
 * 地区数据Service业务层处理
 * 
 * @author 鲍小伟
 * @date 2025-11-04
 */
@Service
public class HaAreaServiceImpl implements IHaAreaService 
{
    @Autowired
    private HaAreaMapper haAreaMapper;

    /**
     * 查询地区数据
     * 
     * @param id 地区数据主键
     * @return 地区数据
     */
    @Override
    public HaArea selectHaAreaById(Long id)
    {
        return haAreaMapper.selectHaAreaById(id);
    }

    /**
     * 查询地区数据列表
     * 
     * @param haArea 地区数据
     * @return 地区数据
     */
    @Override
    public List<HaArea> selectHaAreaList(HaArea haArea)
    {
        return haAreaMapper.selectHaAreaList(haArea);
    }

    /**
     * 新增地区数据
     * 
     * @param haArea 地区数据
     * @return 结果
     */
    @Override
    public int insertHaArea(HaArea haArea)
    {
        haArea.setCreateTime(DateUtils.getNowDate());
        return haAreaMapper.insertHaArea(haArea);
    }

    /**
     * 修改地区数据
     * 
     * @param haArea 地区数据
     * @return 结果
     */
    @Override
    public int updateHaArea(HaArea haArea)
    {
        haArea.setUpdateTime(DateUtils.getNowDate());
        return haAreaMapper.updateHaArea(haArea);
    }

    /**
     * 批量删除地区数据
     * 
     * @param ids 需要删除的地区数据主键
     * @return 结果
     */
    @Override
    public int deleteHaAreaByIds(Long[] ids)
    {
        return haAreaMapper.deleteHaAreaByIds(ids);
    }

    /**
     * 删除地区数据信息
     * 
     * @param id 地区数据主键
     * @return 结果
     */
    @Override
    public int deleteHaAreaById(Long id)
    {
        return haAreaMapper.deleteHaAreaById(id);
    }

    /*
    * 鲍小伟
    * @20251105
    * */
    @Override
    public List<HaArea> getAreaTree() {
        List<HaArea> areas = haAreaMapper.selectAllEnabledAreas();
        return buildTree(areas);
    }

    private List<HaArea> buildTree(List<HaArea> areas) {
        // 将所有地区信息转换为Map，以code为键，Area为值
        Map<String, HaArea> areaMap = areas.stream()
                .collect(Collectors.toMap(HaArea::getCode, area -> area));
        // 构建树形结构
        List<HaArea> tree = new ArrayList<>();
        for (HaArea area : areas) {
            if (area.getPcodeId() == null) {
                tree.add(area);
            } else {
                HaArea parent = areaMap.get(area.getPcodeId());
                if (parent != null) {
                    if (parent.getChildren() == null) {
                        parent.setChildren(new ArrayList<>());
                    }
                    parent.getChildren().add(area);
                }
            }
        }

        return tree;
    }

}
